﻿#include<stdio.h>
#include<math.h>

#define N 4		//4*4的棋盘,4个皇后

int q[N + 1];	  //存储N皇后的列号

int answer = 0;

int check(int j) {
	int i;
	for (i = 1; i < j; i++) {		//检查第j个皇后的位置是否合法
		if (q[i] == q[j] || abs(i - j) == abs(q[i] - q[j])) {	 //判断是否在同一列和同一斜线上
			return 0;		//不合法
		}
	}

	return 1;	//合法
}

void queen(int j) {
	int i;
	for (i = 1; i <= N; i++) {	
		q[j] = i;
		if (check(j)) {		//当摆放的皇后位置合法时
			if (j == N) {		//找到了N皇后的一组解
				answer = answer + 1;
				printf("方案%d:", answer);

				for (i = 1; i <= N; i++) {
					printf("%d", q[i]);
				}
				printf("\n");
			}
			else {
				queen(j + 1);
			}
		}
	}
}

int main() {
	queen(1);
	return 0;
}
